#pragma once
#include "LocalConfigTransfer.h"
#include "LocalConfigProperty.h"
#include <memory>
namespace ecarx::transfer::lcfg {
class LocalConfig{
  std::shared_ptr<ITransfer> mTransfer;
  private:
  LocalConfig();
 public:
  ~LocalConfig();
  static LocalConfig& getInstance();
  std::shared_ptr<ITransfer> toTransfer();
  LocalConfig(const LocalConfig&)=delete;
  LocalConfig(const LocalConfig&&)=delete;
  LocalConfig& operator=(const LocalConfig&)=delete;
  LocalConfig& operator=(const LocalConfig&&)=delete;
  

  public:
  template<typename T>
  T getInt(const LocalConfigProperty& key);
  template<typename T>
  T getUInt(const LocalConfigProperty& key);
  bool getBool(const LocalConfigProperty& key);
  double getDouble(const LocalConfigProperty& key);
  float getFloat(const LocalConfigProperty& key);
  std::string getString(const LocalConfigProperty& key);
};
}  // namespace ecarx::transfer::lcfg
